package com.example.excel;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.*;

import java.io.*;

/**
 * 水印
 */
public class Test2 {
    public static void main(String[] args) throws Exception {
        String out = "E:\\20210719.pdf";
        File file = new File(out);
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        OutputStream outputStream = new FileOutputStream(file);
        // 获取inputStream
        InputStream inputStream = new FileInputStream(new File("E:\\测试.pdf"));
        PdfReader reader = new PdfReader(inputStream);
        PdfStamper stamper = new PdfStamper(reader, outputStream);
        int total = reader.getNumberOfPages() + 1;
        PdfContentByte content;
        //这个地方设置字体一定要为这个，不然不能出现水印，这个地方很容易报错，很多网上资料包不对都会报错，记住一定要使用我给的依赖

        BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
        Font font = new Font(baseFont);
        // 设置字体大小
        font.setSize(13);
        // 设置字体颜色
        font.setColor(new BaseColor(255, 0, 0));
        // 设置类型，为正常
        font.setStyle(Font.NORMAL);
        // 设置类型，加粗
        font.setStyle(Font.BOLD);
        // 设置类型，倾斜
        font.setStyle(Font.ITALIC);
        // 设置类型，下划线
        font.setStyle(Font.UNDERLINE);
        // 设置类型，可组合，倾斜+删除线
        font.setStyle(Font.ITALIC | Font.STRIKETHRU);
        PdfGState gs = new PdfGState();
        for (int i = 1; i < total; i++) {
            //记住这个地方是内容上方，不然不能出现水印
            content = stamper.getOverContent(i);// 在内容上方加水印
            //content = stamper.getUnderContent(i);// 在内容下方加水印
            // 设置透明度，一般在0-1.0
            gs.setFillOpacity(0.5f);
            //要设置透明度的话一定要把PdfGState类加入到PdfContentByte 里面
            content.setGState(gs);
            content.beginText();
            content.setRGBColorFill(169,169,169);
            content.setFontAndSize(baseFont, 15);
            content.setTextMatrix(100, 0);
            //rotation是旋转
            content.showTextAligned(Element.ALIGN_BOTTOM, "我是水印",400 , 10, 0);
            content.showTextAligned(Element.ALIGN_BOTTOM, "上传时间：2021.07.16",400 , 30, 0);
            content.endText();
        }
        stamper.close();
        try {
            //这个地方流一定要关上
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("ok");
    }
}
